/**
 *  ward @ 2019
 *  harrydeep@wardyan.top
 */
package top.wardyan.base.action;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

import top.wardyan.base.config.Const;
import top.wardyan.base.config.SystemConfig;

/**
 * @author ward
 *
 * 2019年2月18日
 */
public abstract class BaseShell<T extends BaseShell<T>> extends Shell{
	
	public static void main(String[] args) {
		//new BaseShell().go();
	}
	
	/** 模块名称 **/
	//protected String MODULENAME = "配置管理器";
	
	protected T self;
	
	@SuppressWarnings("unchecked")
	public BaseShell() {
		super(SWT.SHELL_TRIM);
		self = (T) this;
		
		this.setTitle();
		this.initialize();
		this.setMaximized(true);
	}
	
	protected void initialize() {
		// 全屏
		this.setBounds(Display.getCurrent().getPrimaryMonitor().getClientArea());
		
		//this.setMaximized(true);
		this.setBackground(Const.COLOR_WHITE);
	}
	
	@Override
	public void open(){
		super.open();
		this.layout();		
	}
	
	/**
	 * 这个是用来new窗口后,让它显示的
	 * 使用方法: new Window().go()
	 */
	public void go(){
		this.open();
		while (!this.isDisposed()) {
			if (!this.getDisplay().readAndDispatch()) {
				this.getDisplay().sleep();
			}
		}		
	}
	
	/** 就这样, 否则不能将子类作为父类来用 **/
	@Override
	protected void checkSubclass() {
		// Disable the check that prevents subclassing of SWT components
	}
	
	public void setTitle() {
		this.setText(this.getTitle());
	}
	
	/**
	 * 设置系统标题. 推荐子类重写
	 */
	protected String getTitle() {
		return SystemConfig.SystemName;
	}
	

}
